/**
 * PLC设备参数设置模块脚本
 * 用于管理PLC设备的参数设置相关功能
 */

// 页面加载完成后初始化
document.addEventListener('DOMContentLoaded', function() {
    setupParameterEvents();
    setupSyncButtonEffects();
});

// 设置同步按钮效果
function setupSyncButtonEffects() {
    // 为所有同步按钮添加点击效果
    document.querySelectorAll('.sync-btn').forEach(btn => {
        btn.addEventListener('click', function() {
            // 添加active类以显示点击效果
            this.classList.add('active');
            
            // 显示成功提示
            const dataItem = this.closest('.data-item');
            if (dataItem) {
                const paramName = dataItem.querySelector('.item-label').textContent;
                const paramValue = dataItem.querySelector('.server-value .value-text').textContent;
                const paramUnit = dataItem.querySelector('.server-value .value-unit').textContent;
                
                // 更新本地值为服务端值
                dataItem.querySelector('.local-value .value-text').textContent = paramValue;
                
                // 显示提示消息
                window.showToast(`已同步${paramName}为${paramValue}${paramUnit}`, 'success');
                
                // 短暂延迟后移除active类
                setTimeout(() => {
                    this.classList.remove('active');
                }, 1000);
            }
        });
    });
    
    // 为"全部同步"按钮添加点击效果
    const syncAllBtn = document.querySelector('.sync-all-btn');
    if (syncAllBtn) {
        syncAllBtn.addEventListener('click', function() {
            // 添加active类以显示点击效果
            this.classList.add('active');
            
            // 依次同步所有参数
            const dataItems = document.querySelectorAll('.data-item');
            let delay = 0;
            
            dataItems.forEach((item, index) => {
                const syncBtn = item.querySelector('.sync-btn');
                if (syncBtn) {
                    // 错开执行时间，产生连续同步的视觉效果
                    setTimeout(() => {
                        syncBtn.click();
                    }, delay);
                    delay += 200; // 每个按钮间隔200ms触发
                }
            });
            
            // 全部同步完成后的提示
            setTimeout(() => {
                window.showToast('所有参数已同步完成', 'success');
                this.classList.remove('active');
            }, delay + 500);
        });
    }
}

// 设置参数点击事件
function setupParameterEvents() {
    document.addEventListener('click', function (event) {
        // 查找被点击的数据项
        let targetElement = event.target;
        while (targetElement != null && !targetElement.classList.contains('data-item')) {
            targetElement = targetElement.parentElement;
        }

        // 如果找到了数据项，并且在ventilation或aircondition内容区域
        if (targetElement && targetElement.classList.contains('data-item')) {
            const parentSection = targetElement.closest('.content-section');
            if (parentSection && (parentSection.id === 'ventilation' || parentSection.id === 'aircondition')) {
                const label = targetElement.querySelector('.item-label').textContent;
                const value = targetElement.querySelector('.value-text').textContent;
                const unit = targetElement.querySelector('.value-unit').textContent;

                showEditDialog(label, value, unit, (newValue) => {
                    // 更新显示的值
                    targetElement.querySelector('.value-text').textContent = newValue;

                    // 显示保存成功提示
                    window.showToast(`${label}已更新为${newValue}${unit}`, 'success');

                    // 保存参数到配置
                    saveParameterSetting(label, newValue, unit);
                });
            }
        }
    });
}

// 显示编辑对话框
function showEditDialog(label, currentValue, unit, callback) {
    // 创建对话框元素
    const dialogHtml = `
        <div class="edit-dialog">
            <div class="dialog-header">
                <span>${label}</span>
                <span class="close-btn">&times;</span>
            </div>
            <div class="dialog-body">
                <div class="input-group">
                    <input type="number" class="value-input" value="${currentValue}" min="0" step="1">
                    <span class="input-unit">${unit}</span>
                </div>
            </div>
            <div class="dialog-footer">
                <button class="cancel-btn">取消</button>
                <button class="save-btn">保存</button>
            </div>
        </div>
        <div class="dialog-overlay"></div>
    `;

    // 添加到页面
    document.body.insertAdjacentHTML('beforeend', dialogHtml);

    const dialogOverlay = document.querySelector('.dialog-overlay');
    const editDialog = document.querySelector('.edit-dialog');
    const closeBtn = document.querySelector('.close-btn');
    const cancelBtn = document.querySelector('.cancel-btn');
    const saveBtn = document.querySelector('.save-btn');
    const valueInput = document.querySelector('.value-input');

    // 添加动画效果
    setTimeout(() => {
        dialogOverlay.classList.add('active');
        editDialog.classList.add('active');
        
        // 自动聚焦到输入框并全选内容
        valueInput.focus();
        valueInput.select();
    }, 10);

    // 关闭对话框
    function closeDialog() {
        dialogOverlay.classList.remove('active');
        editDialog.classList.remove('active');
        
        // 延迟移除DOM元素
        setTimeout(() => {
            if (dialogOverlay.parentNode) dialogOverlay.parentNode.removeChild(dialogOverlay);
            if (editDialog.parentNode) editDialog.parentNode.removeChild(editDialog);
        }, 300);
    }

    // 保存值
    function saveValue() {
        const newValue = valueInput.value.trim();
        
        // 简单验证
        if (newValue === '') {
            valueInput.classList.add('error');
            setTimeout(() => valueInput.classList.remove('error'), 500);
            return;
        }
        
        // 调用回调函数
        if (typeof callback === 'function') {
            callback(newValue);
        }
        
        // 关闭对话框
        closeDialog();
    }

    // 绑定事件
    closeBtn.addEventListener('click', closeDialog);
    cancelBtn.addEventListener('click', closeDialog);
    saveBtn.addEventListener('click', saveValue);
    dialogOverlay.addEventListener('click', closeDialog);
    
    // 阻止点击对话框内容时关闭
    editDialog.addEventListener('click', e => e.stopPropagation());
    
    // 按Enter键保存
    valueInput.addEventListener('keypress', e => {
        if (e.key === 'Enter') {
            saveValue();
        }
    });
}

// 保存参数设置
function saveParameterSetting(label, value, unit) {
    try {
        console.log(`保存参数设置: ${label} = ${value}${unit}`);
        
        // 构造参数数据
        const paramData = {
            name: label.replace('：', '').trim(),
            value: value,
            unit: unit,
            section: document.querySelector('.content-section.active').id
        };
        
        // 检查是否使用模拟数据
        if (shouldUseMockData()) {
            console.warn('使用模拟数据模式');
            return;
        }
        
        // 使用异步方法调用Android接口保存参数
        callAndroidMethodAsync('saveModuleParameter', paramData)
            .then(response => {
                if (!response.success) {
                    window.showToast(`参数保存失败: ${response.message}`, 'error');
                }
            })
            .catch(error => {
                console.warn('保存参数API调用失败:', error);
            });
    } catch (e) {
        console.error('保存参数设置失败:', e);
        window.showToast(`参数保存失败: ${e.message}`, 'error');
    }
}

// 辅助函数：判断是否应该使用模拟数据
function shouldUseMockData() {
    // 如果全局配置为使用模拟数据，则直接返回true
    if (window.AppConfig && window.AppConfig.useMockData) {
        return true;
    }
    return false;
}

// 导出函数，以便其他模块使用
window.plcDeviceSetting = {
    setupParameterEvents,
    showEditDialog,
    saveParameterSetting,
    setupSyncButtonEffects
};
